package com.view;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;

import com.type.TipoTelefonoEnum;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ContactoView implements Serializable {

	@NotNull(message = "Debe ingresar un nombre de contacto")
	@Size(min = 1, max = 200, message = "El nombre del contacto debe tener entre 1 y 200 caracteres.")
	private String nombre;

	private String apellido;

	@NotNull(message = "Debe ingresar un mail para el contacto y debe ser válido por ejemplo juan@hotmail.com")
	@Email(message = "El formato del mail no es válido")
	private String mail;

	private Boolean notificar;

	private String telefonoPrincipal;

	private TipoTelefonoEnum tipoTelefonoPrincipal;

	private String telefonoSecundario;

	private TipoTelefonoEnum tipoTelefonoSecundario;

	private String telefonoOtro;

	private TipoTelefonoEnum tipoTelefonoOtro;

	public ContactoView() {
		this(null, null, null, null, null, TipoTelefonoEnum.PERSONAL, null,
				TipoTelefonoEnum.PERSONAL, null, TipoTelefonoEnum.PERSONAL);
	}

	public ContactoView(String nombre, String apellido, String mail,
			Boolean notificar, String telefonoPrincipal,
			TipoTelefonoEnum tipoTelefonoPricipal, String telefonoSecundario,
			TipoTelefonoEnum tipoTelefonoSecundario, String telefonoOtro,
			TipoTelefonoEnum tipoTelefonoOtro) {
		super();
		this.nombre = nombre;
		this.apellido = apellido;
		this.mail = mail;
		this.notificar = notificar;
		this.telefonoPrincipal = telefonoPrincipal;
		this.tipoTelefonoPrincipal = tipoTelefonoPricipal;
		this.telefonoSecundario = telefonoSecundario;
		this.tipoTelefonoSecundario = tipoTelefonoSecundario;
		this.telefonoOtro = telefonoOtro;
		this.tipoTelefonoOtro = tipoTelefonoOtro;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public String getMail() {
		return mail;
	}

	public void setMail(String mail) {
		this.mail = mail;
	}

	public Boolean getNotificar() {
		return notificar;
	}

	public void setNotificar(Boolean notificar) {
		this.notificar = notificar;
	}

	public String getTelefonoPrincipal() {
		return telefonoPrincipal;
	}

	public void setTelefonoPrincipal(String telefonoPrincipal) {
		this.telefonoPrincipal = telefonoPrincipal;
	}

	public TipoTelefonoEnum getTipoTelefonoPrincipal() {
		return tipoTelefonoPrincipal;
	}

	public void setTipoTelefonoPricipal(TipoTelefonoEnum tipoTelefonoPricipal) {
		this.tipoTelefonoPrincipal = tipoTelefonoPricipal;
	}

	public String getTelefonoSecundario() {
		return telefonoSecundario;
	}

	public void setTelefonoSecundario(String telefonoSecundario) {
		this.telefonoSecundario = telefonoSecundario;
	}

	public TipoTelefonoEnum getTipoTelefonoSecundario() {
		return tipoTelefonoSecundario;
	}

	public void setTipoTelefonoSecundario(
			TipoTelefonoEnum tipoTelefonoSecundario) {
		this.tipoTelefonoSecundario = tipoTelefonoSecundario;
	}

	public String getTelefonoOtro() {
		return telefonoOtro;
	}

	public void setTelefonoOtro(String telefonoOtro) {
		this.telefonoOtro = telefonoOtro;
	}

	public TipoTelefonoEnum getTipoTelefonoOtro() {
		return tipoTelefonoOtro;
	}

	public void setTipoTelefonoOtro(TipoTelefonoEnum tipoTelefonoOtro) {
		this.tipoTelefonoOtro = tipoTelefonoOtro;
	}

	@Override
	public boolean equals(Object contactoView) {
		boolean ret = true;

		ContactoView objeto = (ContactoView) contactoView;
		if (nombre != null && objeto.getNombre() != null) {
			ret = ret & nombre.equalsIgnoreCase(objeto.getNombre());
		} else if (nombre == null && objeto.getNombre() == null) {
			ret = ret && true;
		} else {
			ret = ret && false;
		}

		if (apellido != null && objeto.getApellido() != null) {
			ret = ret & apellido.equalsIgnoreCase(objeto.getApellido());
		} else if (apellido == null && objeto.getApellido() == null) {
			ret = ret && true;
		} else {
			ret = ret && false;
		}

		if (mail != null && objeto.getMail() != null) {
			ret = ret & mail.equalsIgnoreCase(objeto.getMail());
		} else if (mail == null && objeto.getMail() == null) {
			ret = ret && true;
		} else {
			ret = ret && false;
		}

		ret = ret && notificar == objeto.getNotificar();

		if (telefonoPrincipal != null && objeto.getTelefonoPrincipal() != null) {
			ret = ret
					& telefonoPrincipal.equalsIgnoreCase(objeto
							.getTelefonoPrincipal());
		} else if (telefonoPrincipal == null
				&& objeto.getTelefonoPrincipal() == null) {
			ret = ret && true;
		} else {
			ret = ret && false;
		}

		ret = ret && tipoTelefonoPrincipal == objeto.getTipoTelefonoPrincipal();

		if (telefonoSecundario != null
				&& objeto.getTelefonoSecundario() != null) {
			ret = ret
					& telefonoSecundario.equalsIgnoreCase(objeto
							.getTelefonoSecundario());
		} else if (telefonoSecundario == null
				&& objeto.getTelefonoSecundario() == null) {
			ret = ret && true;
		} else {
			ret = ret && false;
		}

		ret = ret
				&& tipoTelefonoSecundario == objeto.getTipoTelefonoSecundario();

		if (telefonoOtro != null && objeto.getTelefonoOtro() != null) {
			ret = ret & telefonoOtro.equalsIgnoreCase(objeto.getTelefonoOtro());
		} else if (telefonoOtro == null && objeto.getTelefonoOtro() == null) {
			ret = ret && true;
		} else {
			ret = ret && false;
		}

		ret = ret && tipoTelefonoOtro == objeto.getTipoTelefonoOtro();

		return ret;
	}

}
